package ynu.edu.dish.repository;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import ynu.edu.dish.entity.Dish;

import java.util.List;

/**
 * 菜品Repository
 */
@Repository
public interface DishRepository extends JpaRepository<Dish, Long> {

    /**
     * 根据商家ID查询菜品列表
     *
     * @param merchantId 商家ID
     * @return 菜品列表
     */
    List<Dish> findByMerchantId(Long merchantId);

    /**
     * 根据商家ID和状态查询菜品列表
     *
     * @param merchantId 商家ID
     * @param status 状态
     * @return 菜品列表
     */
    List<Dish> findByMerchantIdAndStatus(Long merchantId, Integer status);

    /**
     * 根据分类ID查询菜品列表
     *
     * @param categoryId 分类ID
     * @return 菜品列表
     */
    List<Dish> findByCategoryId(Long categoryId);

    /**
     * 根据分类ID和状态查询菜品列表
     *
     * @param categoryId 分类ID
     * @param status 状态
     * @return 菜品列表
     */
    List<Dish> findByCategoryIdAndStatus(Long categoryId, Integer status);

    /**
     * 根据商家ID分页查询菜品列表
     *
     * @param merchantId 商家ID
     * @param pageable 分页参数
     * @return 菜品分页列表
     */
    Page<Dish> findByMerchantId(Long merchantId, Pageable pageable);

    /**
     * 根据分类ID分页查询菜品列表
     *
     * @param categoryId 分类ID
     * @param pageable 分页参数
     * @return 菜品分页列表
     */
    Page<Dish> findByCategoryId(Long categoryId, Pageable pageable);

    /**
     * 根据菜品名称模糊查询
     *
     * @param name 菜品名称
     * @param pageable 分页参数
     * @return 菜品分页列表
     */
    Page<Dish> findByNameContaining(String name, Pageable pageable);

    /**
     * 根据商家ID和菜品名称模糊查询
     *
     * @param merchantId 商家ID
     * @param name 菜品名称
     * @param pageable 分页参数
     * @return 菜品分页列表
     */
    Page<Dish> findByMerchantIdAndNameContaining(Long merchantId, String name, Pageable pageable);

    /**
     * 根据商家ID查询推荐菜品
     *
     * @param merchantId 商家ID
     * @param isRecommended 是否推荐
     * @return 菜品列表
     */
    List<Dish> findByMerchantIdAndIsRecommended(Long merchantId, Integer isRecommended);

    /**
     * 根据商家ID查询特价菜品
     *
     * @param merchantId 商家ID
     * @param isSpecial 是否特价
     * @return 菜品列表
     */
    List<Dish> findByMerchantIdAndIsSpecial(Long merchantId, Integer isSpecial);
} 